package com.sddr.base.frame.metadata;

import com.sddr.common.entity.ConfigRule;
import org.springframework.cloud.client.ServiceInstance;

import java.util.Map;

/**
 * @author 山顶洞人郑某
 * @className MetaDataOperation.java 元数据接口  对于 区域 组 版本 等信息都放在了服务的元数据中 在Naocs中是放在 NacosServiceInstance中
 * @date 2025 06 04
 */
public interface MetaDataOperation {

    /**
     * 规则
     * @return 结果
     */
    ConfigRule getConfigRule();

    /**
     * 获取服务id
     * @param server 服务 Servicelnstance 其实是对服务实例的抽象设计，它也是接口，是SpringCloud规定的，
     *               Nacos的服务实例和Eureka的服务实例都会遵守结构
     * @return serverId
     */
    String getServiceIdFromServer(ServiceInstance server);

    /**
     * 获取版本
     * @param server 服务
     * @return 结果
     * */
    String getVersionFromServer(ServiceInstance server);

    /**
     * 获取版本
     * @return 结果
     * */
    String getVersion();

    /**
     * 获取区域
     * @return 结果
     * */
    String getZone();

    /**
     * 获取灰度
     * @return 结果
     * */
    String getGray();

    /**
     * 获取区域
     * @param server 服务
     * @return 结果
     * */
    String getZoneFromServer(ServiceInstance server);

    /**
     * 获取灰度
     * @param server 服务
     * @return 结果
     * */
    String getGrayFromServer(ServiceInstance server);

    /**
     * 获取组
     * @return 结果
     * */
    String getDefaultGroupKey();

    /**
     * 获取组
     * @return 结果
     * */
    String getGroup();

    /**
     * 获取服务id
     * @return 结果
     * */
    String getServiceId();

    /**
     * 规则
     * @param configRule 规则
     * */
    void setRule(ConfigRule configRule);

    /**
     * 获取组
     * @param server 服务
     * @return 结果
     * */
    String getGroupFromServer(ServiceInstance server);

    /**
     * 获取信息
     * @return 结果
     * */
    Map<String,String> getInfo();
}


